<template>
	<text class="title" style="text-align: center;">
		当前app资源版本为：{{ appWgtVersion }}
		<button @click="checkForUpdate">检查版本</button>
	</text>
</template>

<script setup>
import {
	ref
} from 'vue'
import {
	onLoad
} from '@dcloudio/uni-app'
const appWgtVersion = ref('')

// 在应用加载时调用checkForUpdate方法检查是否有新版本。
onLoad(() => {
	checkForUpdate()
})

/**
 * 检查是否需要更新app
 */
function checkForUpdate() {
	// 只在 app 中才会执行以下代码
	// #ifdef APP-PLUS
	// 获取手机系统信息
	const systemInfo = uni.getSystemInfoSync()
	// 获取到 app 资源包版本
	appWgtVersion.value = systemInfo.appWgtVersion
	// 向 Node.js 后端发送请求检查是否需要更新
	const res = uni.request({
		url: 'http://8.130.66.190/checkForUpdate/' + appWgtVersion.value,
		success: (res) => {
			console.log('request-res', res);
			if (res.data && res.data.update) {
				uni.showModal({
					title: '新版本发布',
					content: '检查到当前有新版本,需要更新吗？',
					showCancel: true,
					confirmText: '立即更新',
					showCancel: false,
					// cancelText: '暂不更新',
					// 接口调用成功
					success: (modalRes) => {
						if (modalRes.confirm) {
							// 立即更新app操作
							uni.showLoading({
								title: '正在下载'
							})
							console.log('res.data.url', res.data.url);
							// 开始下载任务
							const downloadTask = uni.downloadFile({
								url: res.data.url,
								success: (downloadRes) => {
									if (downloadRes.statusCode === 200) {
										uni.showLoading({
											title: '正在安装更新...'
										});
										plus.runtime.install(downloadRes.tempFilePath, {
											force: true
										}, () => {
											console.log('install success...');
											uni.hideLoading()
											plus.runtime.restart();
										}, (e) => {
											console.log('install fail...', e);
											uni.hideLoading()
											uni.showToast({
												title: '安装失败:' + JSON.stringify(e),
												icon: 'fail',
												duration: 1500
											});
										});
										setTimeout(() => {
											uni.hideLoading();
											uni.showToast({
												title: '安装成功！',
												icon: 'none'
											});
										}, 3000);
									}
								},
								// 接口调用失败
								fail: (fail) => {
									console.log('网络错误，下载失败！', fail);
									uni.hideLoading();
								},
								// 接口调用结束
								complete: () => {
									console.log('----------------Complete----------------:', downloadTask)
									downloadTask.offProgressUpdate(); //取消监听加载进度
								}
							});
							//监听下载进度
							downloadTask.onProgressUpdate(res => {
								// console.log('下载进度百分比:' + res.progress); // 下载进度百分比
								// console.log('已经下载的数据长度:' + res.totalBytesWritten); // 已经下载的数据长度，单位 Bytes
								// console.log('预期需要下载的数据总长度:' + res.totalBytesExpectedToWrite); // 预期需要下载的数据总长度，单位 Bytes
							});
						}
						// else {
						// 	// 暂不更新app操作
						// 	// 如果是你的发布需要强制更新的话,不更新app可以直接退出 APP 不让使用
						// 	if (res.data.mandatoryUpdate) {
						// 		if (systemInfo.platform === 'android') {
						// 			// 安卓退出app
						// 			plus.runtime.quit();
						// 		} else {
						// 			// 判断为ios的手机，退出App
						// 			plus.ios.import("UIApplication").sharedApplication().performSelector("exit");
						// 		}
						// 	}
						// }
					}
				});
			}
		},
		fail: (fail) => {
			console.log('检查更新请求失败！', fail.errMsg);
			return fail.errMsg
		}
	});
	// #endif
}
</script>